package com.siashan.toolkit.crypt;

/**
 * 为解码器提供最高级别的抽象。
 * <p>
 * 这是{@link Encoder}的姐妹接口。所有解码器都实现这个通用接口。
 * 允许用户将通用对象传递给编解码器包中的任何解码器实现。
 * <p>
 * 编解码器软件包中心的两个接口之一。
 *
 */
public interface Decoder {

    /**
     * 解码“编码”对象并返回“解码”对象。请注意，此接口的实现将
     * 尝试将对象参数强制转换为特定解码器实现所需的特定类型。如果
     * {@link ClassCastException}发生此解码方法将引发DecodeException。
     *
     * @param source
     *            要解码的对象
     * @return “解码”对象
     * @throws DecoderException
     *             解码器异常可以出于多种原因引发。一些好的候选人是
     *              传递给此方法的参数为null，无法将参数转换为
     *              特定编码器。
     */
    Object decode(Object source) throws DecoderException;
}

